www.gusucode.com > VC++的多文档标签选项卡实例 (Tab)源码程序 > VC++的多文档标签选项卡实例 (Tab)源码程序\code\ViewManager.cpp

    // ViewManager.cpp: implementation of the CViewManager class.
// download by http://www.NewXing.com
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "ViewManager.h"
#include "MainFrm.h"
#include "MyTab.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif


//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CViewManager::CViewManager()
{
	bClosing = false;
}

CViewManager::~CViewManager()
{
	arViews.RemoveAll();
	arViewTitles.RemoveAll();
}

void CViewManager::AddView(const char * csName, CView * pView)
{
	if (bClosing) return;

	CString cs(csName);

	arViews.Add(pView);
	arViewTitles.Add(cs);
	if ( ((CMainFrame*)AfxGetMainWnd())->m_MyTab.GetSafeHwnd())
	{
		TC_ITEM ti;
		ti.mask = TCIF_TEXT|TCIF_PARAM;
		ti.pszText = cs.LockBuffer();
		ti.lParam = (long) pView;
		   ((CMainFrame*)AfxGetMainWnd())->m_MyTab.InsertItem(   ((CMainFrame*)AfxGetMainWnd())->m_MyTab.GetItemCount(), &ti);
		cs.UnlockBuffer();
	}
}

void CViewManager::RemoveView(CView * pView)
{
	if (bClosing || arViews.GetSize() <= 0) return;

	int t;

	if (   ((CMainFrame*)AfxGetMainWnd())->m_MyTab.GetSafeHwnd())
	{
		for (t = 0; t <    ((CMainFrame*)AfxGetMainWnd())->m_MyTab.GetItemCount(); t++)
		{
			TC_ITEM ti;
			ti.mask = TCIF_PARAM;
			   ((CMainFrame*)AfxGetMainWnd())->m_MyTab.GetItem(t, &ti);
			if (ti.lParam == (long) pView)
			{
				   ((CMainFrame*)AfxGetMainWnd())->m_MyTab.DeleteItem(t);
				break;
			}
		}
	}


	for (t = 0; t < arViews.GetSize(); t++)
	{
		if ((CView *)(arViews.GetAt(t)) == pView)
		{
			arViewTitles.RemoveAt(t);
			arViews.RemoveAt(t);
			return;
		}
	}
}

void CViewManager::RemoveAll()
{
	arViews.RemoveAll();
	arViewTitles.RemoveAll();
}



void CViewManager::OnActivateView(const BOOL bActivate, CView * pView)
{
	if (bActivate)
	{
		if (   ((CMainFrame*)AfxGetMainWnd())->m_MyTab.GetSafeHwnd())
		{
			for (int t = 0; t <    ((CMainFrame*)AfxGetMainWnd())->m_MyTab.GetItemCount(); t++)
			{
				TC_ITEM ti;
				ti.mask = TCIF_PARAM;
				   ((CMainFrame*)AfxGetMainWnd())->m_MyTab.GetItem(t, &ti);
				if (ti.lParam == (long) pView)
				{
					   ((CMainFrame*)AfxGetMainWnd())->m_MyTab.SetCurSel(t);
					   ((CMainFrame*)AfxGetMainWnd())->m_MyTab.Invalidate();
					break;
				}
			}
		}
	}
}